import Database from 'better-sqlite3';
import {ColumnMetadata, IndexColumnMetadata, IndexMetadata} from "../types";

/**
 * 数据库元数据工具类
 * 提供用于获取表结构信息的方法
 */
export class DbMetadataUtils {
  /**
   * 获取表的列信息
   * @param db 数据库实例
   * @param tableName 表名
   * @returns 列信息数组
   */
  public static getTableColumns(db: Database.Database, tableName: string): ColumnMetadata[] {
    return db.prepare(`PRAGMA table_info(${tableName})`).all() as ColumnMetadata[];
  }

  /**
   * 获取表的索引信息
   * @param db 数据库实例
   * @param tableName 表名
   * @returns 索引信息数组
   */
  public static getTableIndices(db: Database.Database, tableName: string): IndexMetadata[] {
    return db.prepare(`PRAGMA index_list(${tableName})`).all() as IndexMetadata[];
  }

  /**
   * 获取索引的列信息
   * @param db 数据库实例
   * @param indexName 索引名
   * @returns 索引列信息数组
   */
  public static getIndexColumns(db: Database.Database, indexName: string): IndexColumnMetadata[] {
    return db.prepare(`PRAGMA index_info(${indexName})`).all() as IndexColumnMetadata[];
  }

  /**
   * 检查表是否存在
   * @param db 数据库实例
   * @param tableName 表名
   * @returns 表是否存在
   */
  public static isTableExists(db: Database.Database, tableName: string): boolean {
    const result = db.prepare(
      `SELECT name FROM sqlite_master WHERE type='table' AND name=?`
    ).get(tableName);
    return !!result;
  }
}
